package de.hwrberlin.remo.algorithm;

import java.util.List;

import de.hwrberlin.remo.model.ElementState;
import de.hwrberlin.remo.model.Fact;
import de.hwrberlin.remo.model.KnowledgeBaseElement;

/**
 * 
 * This interface describes the methods of an user interface 
 * for the algorithm execution.
 * 
 * @author Mario Sänger (IT 09)
 * @version 1.0 
 *
 */
public interface UserInterface {
	
	/**
	 * Asks the user for the state of the given fact.
	 * 
	 * @param fact Fact with an unknown state
	 * @return User answer
	 */
	public ElementState askForState(Fact fact);
	
	/**
	 * Highlights the given element within the user interface.
	 * 
	 * @param element Element to be highlighted
	 */
	public void highlightElement(KnowledgeBaseElement element);
	
	/**
	 * Remove highlighting of the given element.
	 * 
	 * @param element Highlighted Element
	 */
	public void unhighlightElement(KnowledgeBaseElement element);
	
	/**
	 * Remove highlighting of all given elements.
	 * 
	 * @param elements List of highlighted elements
	 */
	public void unhighlightAllElement(List<KnowledgeBaseElement> elements);

}